/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package NajaTaskClient.classes;

import NajaTaskClient.Conexao.Db;
import NajaTaskClient.Conexao.DbTabela;
import NajaTaskClient.Conexao.DbTabelaColuna;
import NajaTaskClient.Conexao.ExcecaoGenericaMensagem;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author nidorx
 */
public class Grupo implements Comparable<Grupo> {

    Vector<Usuario> Usuarios;//quais usuários fazem parte desse grupo
    private DbTabela tabelaGrupos;
    private String codigo;
    private String titulo;
    private String descricao;
    private int ativo;

    private void criarTabelas() {
        try {
            /*
            criando a estrutura no banco de dados se acaso não existir
             */
            /*tabela de Grupo s*/
            tabelaGrupos = Db.get().dbTabelaAdicionar(new DbTabela("grupos"));
            tabelaGrupos.campoAdicionar(new DbTabelaColuna("codigo", "INT", 11, false, false, true));
            tabelaGrupos.campoAdicionar(new DbTabelaColuna("titulo", "VARCHAR", 100, false, false, false));
            tabelaGrupos.campoAdicionar(new DbTabelaColuna("descricao", "VARCHAR", 500, true, false, false));
            tabelaGrupos.campoAdicionar(new DbTabelaColuna("ativo", "INT", 1, true, false, false));
        } catch (ExcecaoGenericaMensagem ex) {
            Logger.getLogger(Usuario.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public Grupo() {
        this.criarTabelas();
        this.Usuarios = new Vector<Usuario>();
    }

    public Grupo(String codigo, String titulo, String descricao, int ativo) {
        this.criarTabelas();
        this.codigo = codigo;
        this.titulo = titulo;
        this.descricao = descricao;
        this.ativo = ativo;
    }

    /*usado na interface grupoEditar.java*/
    public Grupo(String codigo) {
        this.criarTabelas();
        this.atualizarDados(codigo);
    }

    private void atualizarDados(String codigo) {
        if (this.tabelaGrupos.coluna("codigo").inserido(codigo)) {
            try {
                ResultSet rst = this.tabelaGrupos.selectAllClausulaWhere("codigo=\'" + codigo + "\'");
                while (rst.next()) {
                    this.codigo = rst.getString("codigo");
                    this.titulo = rst.getString("titulo");
                    this.descricao = rst.getString("descricao");
                    this.ativo = rst.getInt("ativo");
                }

            } catch (SQLException ex) {
                Logger.getLogger(Db.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    }

    /*insere um novo registro no banco de dados*/
    public boolean novo(String titulo, String descricao) {
        try {
            String dados = "titulo=\'" + titulo
                + "\',descricao=\'" + descricao
                + "\',ativo=\'" + 1 + "\'";
            this.tabelaGrupos.insert(dados);

            return true;
        } catch (SQLException ex) {
            Logger.getLogger(Grupo.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ExcecaoGenericaMensagem ex) {
            Logger.getLogger(Grupo.class.getName()).log(Level.SEVERE, null, ex);
        }
        return false;
    }

    /*insere um novo registro no banco de dados*/
    public boolean atualiza() {

        String dados = "titulo=\'" + this.obterTitulo()
                + "\',descricao=\'" + this.obterDescricao()
                + "\',ativo=\'" + this.ativo + "\'";
        if (this.tabelaGrupos.atualizarLinhaClausulaWhere(dados, "codigo=\'" + this.obterCodigo() + "\'")) {
            return true;
        }
        return false;
    }

    public String obterCodigo() {
        return this.codigo;
    }

    public int ativo() {
        return this.ativo;
    }

    public String obterTitulo() {
        return this.titulo;
    }

    public String obterDescricao() {
        return this.descricao;
    }

    public Vector<Usuario> obterListaUsuarios() {
        return this.Usuarios;
    }

    public ResultSet obterListaGrupos() throws SQLException {
        ResultSet rst = this.tabelaGrupos.selectAll();
        return rst;
    }

    public void AdicionarUsuario(Usuario novo) {
        this.Usuarios.add(novo);
    }//Fim do metodo AdicionarUsuario

    public void ExcluirUsuario(String codigo) {
        for (Usuario elemento : this.Usuarios) {
            if (elemento.obterCodigo().equals(codigo)) {
                this.Usuarios.remove(elemento);
                break;
            }
        }
    }//Fim do metodo ExcluirUsuario

    public int compareTo(Grupo o) {
        final int EQUAL = 0;
        final int AFTER = 1;
        if (this == o) {
            return EQUAL;
        }
        if (this.codigo.equals(o.codigo)) {
            return EQUAL;
        }
        return AFTER;
    }

    public void ativo(int ativo) {
        this.ativo = ativo;
    }

    public void setarTitulo(String titulo) {
        this.titulo=titulo;
    }

    public void setarDescricao(String descricao) {
       this.descricao=descricao;
    }

    /*retorna direto do banco de dados o nome de um determinado grupo a partir de seu código*/
    String obterTitulo(String codigo) {
        if (this.tabelaGrupos.coluna("codigo").inserido(codigo)) {
            try {
                ResultSet rst = this.tabelaGrupos.selectAllClausulaWhere("codigo=\'" + codigo + "\'");
                String tituloGrupo;
                while (rst.next()) {
                    tituloGrupo = rst.getString("titulo");
                    return tituloGrupo;
                }

            } catch (SQLException ex) {
                Logger.getLogger(Db.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
        return "";
    }
}
